#ifndef ROBOT_ARM_H
#define ROBOT_ARM_H

#include "stdint.h"
#include "tim.h"

typedef enum
{
    BIG_ARM,
    SMALL_ARM,
    CLAW_ARM
} Arm_TypeDef;

typedef enum
{
    Releasing = 0,
    Grabing
} Claw_Status;

//
typedef struct
{
    int32_t BIG_ARM_JOINT;   // 大臂摆动角度（30-150°）
    int32_t SMALL_ARM_JOINT; // 小臂摆动角度（20-160°）
    int32_t CLAW_JOINT;      // 夹爪开合角度（20-80°）
    int32_t CLAW_STATUS;
} joint_angle;

// 四关节定义（对应定时器通道）
#define BASE_JOINT_CH TIM_CHANNEL_1      // 基座旋转（TIM8_CH1）
#define BIG_ARM_JOINT_CH TIM_CHANNEL_2   // 大臂摆动（TIM8_CH2）
#define SMALL_ARM_JOINT_CH TIM_CHANNEL_3 // 小臂摆动（TIM8_CH3）
#define CLAW_JOINT_CH TIM_CHANNEL_4      // 夹爪开合（TIM8_CH4）

// 各关节角度范围（软限位，单位：°）
#define BIG_ARM_MIN -90
#define BIG_ARM_MAX 90
#define SMALL_ARM_MIN -90
#define SMALL_ARM_MAX 90
#define CLAW_MIN (-90) // 张开状态
#define CLAW_MAX (-20)  // 闭合状态
#define DEAD_ZONE 50

// PWM参数（20ms周期，0.5ms-2.5ms对应0°-180°）
#define PWM_ARR 1999 // 自动重装载值
#define PWM_START_PULSE 150
#define PWM_MIN_PULSE 50  // 0.5ms对应的脉冲值
#define PWM_MAX_PULSE 250 // 2.5ms对应的脉冲值

//
#define Forward 1
#define Reverse (-1)
#define Stay 0
#define TurnLeft 160
#define TurnRight 140

// 机械臂初始化
void RobotArm_Init(void);
void RobotArm_Drive(void);

// 各关节角度控制
float Angle_To_Pulse(float angle);
void RobotArm_BaseDrive(void);
void RobotArm_SetBigArmAngle(float angle);   // 大臂摆动角度（30-150°）
void RobotArm_SetSmallArmAngle(float angle); // 小臂摆动角度（20-160°）
void RobotArm_SetClawAngle(float angle);     // 夹爪开合角度（20-80°）

// 动作控制
void RobotArm_Reset(void);         // 复位到初始位置
void RobotArm_GrabAction(void);    // 抓取动作示例
void RobotArm_ReleaseAction(void); // 释放动作示例
void Update_Servo_PWM();

#endif
